﻿#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable : 6031)
#include <stdbool.h>

//对称二叉树
//bool isSameTree(struct TreeNode* node1, struct TreeNode* node2) {
//    if (!node1 && !node2)
//        return true;
//
//    if (!node1 || !node2)
//        return  false;
//
//    if (node1->val != node2->val)
//        return false;
//
//    return isSameTree(node1->left, node2->right)
//        && isSameTree(node1->right, node2->left);
//}
//
//bool isSymmetric(struct TreeNode* root) {
//    return isSameTree(root->left, root->right);
//}

//相同二叉树
//bool isSameTree(struct TreeNode* node1, struct TreeNode* node2) {
//    if (!node1 && !node2)
//        return true;
//
//    if (!node1 || !node2)
//        return  false;
//
//    if (node1->val != node2->val)
//        return false;
//
//    return isSameTree(node1->left, node2->left)
//        && isSameTree(node1->right, node2->right);
//}

//单值二叉树
//bool isUnivalTree(struct TreeNode* node) {
//    if (!node)
//        return true;
//
//    if (node->left && node->left->val != node->val)
//        return false;
//
//    if (node->right && node->right->val != node->val)
//        return false;
//
//    return isUnivalTree(node->left)
//        && isUnivalTree(node->right);
//}

//二叉树的前序遍历，返回数组
//int getsize(struct TreeNode* root)
//{
//    return root == NULL ? 0 : getsize(root->left)
//        + getsize(root->right) + 1;
//}
//
//void pusharr(int* arr, struct TreeNode* root, int* i)
//{
//    if (!root)
//        return;
//
//    arr[(*i)++] = root->val;
//    pusharr(arr, root->left, i);
//    pusharr(arr, root->right, i);
//}
//
//int* preorderTraversal(struct TreeNode* root, int* returnSize) {
//    *returnSize = getsize(root);
//    int* arr = (int*)malloc(sizeof(int) * (*returnSize));
//    if (!arr)
//        return NULL;
//
//    int i = 0;
//    pusharr(arr, root, &i);
//    return arr;
//}

//另一棵树的子树
//bool isSameTree(struct TreeNode* node1, struct TreeNode* node2) {
//    if (!node1 && !node2)
//        return true;
//
//    if (!node1 || !node2)
//        return  false;
//
//    if (node1->val != node2->val)
//        return false;
//
//    return isSameTree(node1->left, node2->left)
//        && isSameTree(node1->right, node2->right);
//}
//
//bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {
//    if (!root)
//        return false;
//
//    if (isSameTree(root, subRoot))
//        return true;
//
//    return isSubtree(root->left, subRoot)
//        || isSubtree(root->right, subRoot);
//}